﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static TipoVeiculoVO getTipoVeiculo( int idTipoVeiculo)
        {
            List<TipoVeiculoVO> listaTipoVeiculoVO = getTipoVeiculos(true, idTipoVeiculo);
            if (listaTipoVeiculoVO != null && listaTipoVeiculoVO.Count > 0)
                return listaTipoVeiculoVO[0];
            else
                return null;
        }
        public static List<TipoVeiculoVO> getTipoVeiculos()
        {
            List<TipoVeiculoVO> tipoVeiculos = getTipoVeiculos(false, null);
            return tipoVeiculos;
        }

        public static List<TipoVeiculoVO> getTipoVeiculos(bool somentePermitidos, int? idTipoVeiculo)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdTipoVeiculo, TipoVeiculo, Permitido, Ordem ");
            query.AppendLine("FROM tipoveiculo ");
            if (somentePermitidos)
            {
                query.AppendLine(where + "Permitido=?Permitido ");
                where = "AND ";
            }
            if (idTipoVeiculo != null)
            {
                query.AppendLine(where + "IdTipoVeiculo=?IdTipoVeiculo ");
                where = "AND ";
            }

            query.AppendLine("ORDER BY Ordem, TipoVeiculo ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (somentePermitidos) cmd.Parameters.AddWithValue("?Permitido", somentePermitidos);
            if (idTipoVeiculo != null) cmd.Parameters.AddWithValue("?IdTipoVeiculo", idTipoVeiculo);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<TipoVeiculoVO> listTipoVeiculo = new List<TipoVeiculoVO>();

                while (reader.Read())
                {
                    TipoVeiculoVO tipoVeiculoVO = TipoVeiculoVO.CreateTipoVeiculoVO();
                    tipoVeiculoVO.idTipoVeiculo = reader.GetInt32("IdTipoVeiculo");
                    tipoVeiculoVO.tipoVeiculo = reader.GetString("TipoVeiculo");
                    tipoVeiculoVO.permitido = reader.GetBoolean("Permitido");
                    tipoVeiculoVO.ordem = reader.GetInt32("Ordem");

                    listTipoVeiculo.Add(tipoVeiculoVO);
                }
                reader.Close();
                return listTipoVeiculo;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setTipoVeiculo(TipoVeiculoVO tipoVeiculoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE tipoveiculo ");
            query.AppendLine("SET TipoVeiculo=?TipoVeiculo, Permitido=?Permitido, Ordem=?Ordem ");
            query.AppendLine("WHERE IdTipoVeiculo=?IdTipoVeiculo ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTipoVeiculo", tipoVeiculoVO.idTipoVeiculo);
            cmd.Parameters.AddWithValue("?TipoVeiculo", tipoVeiculoVO.tipoVeiculo);
            cmd.Parameters.AddWithValue("?Permitido", tipoVeiculoVO.permitido);
            cmd.Parameters.AddWithValue("?Ordem", tipoVeiculoVO.ordem);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newTipoVeiculo(TipoVeiculoVO tipoVeiculoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO tipoveiculo ");
            query.AppendLine("SET TipoVeiculo=?TipoVeiculo, Permitido=?Permitido, Ordem=?Ordem ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?TipoVeiculo", tipoVeiculoVO.tipoVeiculo);
            cmd.Parameters.AddWithValue("?Permitido", tipoVeiculoVO.permitido);
            cmd.Parameters.AddWithValue("?Ordem", tipoVeiculoVO.ordem);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delTipoVeiculo(TipoVeiculoVO tipoVeiculoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM tipoveiculo ");
            query.AppendLine("WHERE IdTipoVeiculo=?IdTipoVeiculo ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTipoVeiculo", tipoVeiculoVO.idTipoVeiculo);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static bool readyToDeleteTipoVeiculo(int idTipoVeiculo)
        {
            int contagem = 0;
 
            MySqlDataReader reader = null;
            StringBuilder query = new StringBuilder();
            MySqlCommand cmd = getConnection();
            cmd.Connection.Open();

            try
            {

                query.AppendLine("SELECT count(*) contagem FROM modelo WHERE IdTipoVeiculo=?IdTipoVeiculo ");
                cmd.CommandText = query.ToString();
                cmd.Parameters.AddWithValue("?IdTipoVeiculo", idTipoVeiculo);
                reader = cmd.ExecuteReader();
                reader.Read();
                contagem = reader.GetInt32("contagem");
                reader.Close();

                query = new StringBuilder();
                query.AppendLine("SELECT count(*) contagem FROM veiculo WHERE IdTipo=?IdTipoVeiculo ");
                cmd.CommandText = query.ToString();
                reader = cmd.ExecuteReader();
                reader.Read();
                contagem += reader.GetInt32("contagem");
                reader.Close();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

            return contagem == 0;

        }

    }
}
